using System;
using System.Collections.Generic;
using System.Text;

namespace Decav.Geocoding
{
    /// <summary>
    /// Interfaces an adapter to a geocoding system that converts addresses to geographical coordinates.
    /// </summary>
    public interface IGeocoder
    {
        /// <summary>
        /// Finds an address given the specified search string, that should contain as much
        /// information as possible about the address.
        /// </summary>
        /// <param name="searchString">The address to search for, with as much detail as possible.</param>
        /// <returns>The results found for the geocoding of the specified address.</returns>
        GeocodeAddressResult[] FindAddress(string searchString);

        /// <summary>
        /// Finds an intersection of two streets.
        /// </summary>
        /// <param name="searchString">The search criteria to find the intersection by.</param>
        /// <returns>The geocoded results for the intersection lookup.</returns>
        GeocodeIntersectionResult[] FindIntersection(string searchString);

        /// <summary>
        /// Intelligently geocodes two locations.
        /// </summary>
        /// <param name="searchString">The search string to geocode by.</param>
        /// <returns>The results for the geocode.</returns>
        GeocodeResult[] Find(string searchString);
    }
}
